// #include <stdio.h>
// #include <stdlib.h>
// #include <stdbool.h>
// #include "windows.h"
//
// typedef int DataType;
//
// typedef struct TreeNode {
//     DataType value;
//     struct TreeNode* left;
//     struct TreeNode* right;
// } TreeNode;
//
// // 创建树的新节点
// TreeNode* CreateNode(DataType value) {
//     TreeNode* newNode = (TreeNode*)malloc(sizeof(TreeNode));
//     if (newNode == NULL) {
//         perror("Memory allocation failed");
//         exit(EXIT_FAILURE);
//     }
//     newNode->value = value;
//     newNode->left = newNode->right = NULL;
//     return newNode;
// }
//
// // 插入节点（二叉搜索树规则）
// TreeNode* InsertNode(TreeNode* root, DataType x) {
//     if (root == NULL) {
//         return CreateNode(x);
//     }
//     if (x < root->value) {
//         root->left = InsertNode(root->left, x);
//     } else {
//         root->right = InsertNode(root->right, x);
//     }
//     return root;
// }
//
// // 释放内存
// void FreeTree(TreeNode* root) {
//     if (root) {
//         FreeTree(root->left);
//         FreeTree(root->right);
//         free(root);
//     }
// }
//
// bool Similiar(TreeNode* root1, TreeNode* root2) {
//     // 两棵树都为空
//     if (root1 == NULL && root2 == NULL) {
//         return true;
//     }
//     // 一棵树为空，另一棵不为空
//     if (root1 == NULL || root2 == NULL) {
//         return false;
//     }
//     // 两棵树都不为空时，递归检查左右子树
//     return Similiar(root1->left, root2->left) &&
//            Similiar(root1->right, root2->right);
// }
//
// int main() {
//     SetConsoleOutputCP(CP_UTF8);
//     TreeNode* root1 = NULL;
//     TreeNode* root2 = NULL;
//     int values1[] = {50, 30, 70, 20, 40, 60, 80};
//     int values2[] = {50, 30, 70, 20, 40, 60, 80};
//     int length1 = sizeof(values1) / sizeof(values1[0]);
//     int length2 = sizeof(values2) / sizeof(values2[0]);
//
//     // 构建二叉搜索树
//     for (int i = 0; i < length1; i++) {
//         root1 = InsertNode(root1, values1[i]);
//     }
//
//     for (int i = 0; i < length2; i++) {
//         root2 = InsertNode(root2, values2[i]);
//     }
//
//     if(Similiar(root1,root2)) {
//         printf("是相似的二叉树\n");
//     }else {
//         printf("不是\n");
//     }
//
//     FreeTree(root1);
//     FreeTree(root2);
//     return 0;
// }